<template>
  <div :class="prefixCls" class="relative w-full h-full px-4">
    <div class="flex items-center absolute right-4 top-4">
      <AppDarkModeToggle class="enter-x mr-2" v-if="!sessionTimeout" />
      <AppLocalePicker class="text-white enter-x xl:text-gray-600" :show-text="false"
        v-if="!sessionTimeout && showLocale" />
    </div>

    <span class="-enter-x xl:hidden">
      <AppLogo :alwaysShowTitle="true" :isLogin="true" />
    </span>

    <div class="container relative h-full py-2 mx-auto sm:px-10">
      <div class="flex h-full">
        <div class="hidden min-h-full pl-4 mr-4 xl:flex xl:flex-col xl:w-6/12">
          <AppLogo class="-enter-x" :isLogin="true" />
          <div class="my-auto">
            <img :alt="title" src="../../../assets/svg/login-box-bg.svg" class="w-1/2 -mt-16 -enter-x" />
            <div class="mt-10 font-medium text-white -enter-x">
              <span class="inline-block mt-4 text-3xl"> {{ t('sys.login.signInMsTitle') }}</span>
            </div>
            <div class="mt-5 font-normal text-white dark:text-gray-500 -enter-x">
              {{ t('sys.login.signMsDesc') }}
            </div>
          </div>
        </div>
        <div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12">
          <div :class="`${prefixCls}-form`"
            class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x">
            <Spin :spinning="loading" tip="钉钉账号自动登录中..">
              <LoginForm />
            </Spin>

            <ForgetPasswordForm />
            <RegisterForm />
            <MobileForm />
            <QrCodeForm />
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script lang="ts" setup>
import * as dd from 'dingtalk-jsapi'; // 此方式为整体加载，也可按需进行加载
import { AppDarkModeToggle, AppLocalePicker, AppLogo } from '@/components/Application';
import { useGlobSetting } from '@/hooks/setting';
import { useDesign } from '@/hooks/web/useDesign';
import { useI18n } from '@/hooks/web/useI18n';
import { useLocaleStore } from '@/store/modules/locale';
import { useMessage } from '@/hooks/web/useMessage';
import VConsole from 'vconsole';

const userStore = useUserStore();
const { notification, createErrorModal } = useMessage();
import { Spin } from 'ant-design-vue';

import { ref, computed, onMounted } from 'vue';
import ForgetPasswordForm from './ForgetPasswordForm.vue';
import LoginForm from './LoginForm.vue';
import MobileForm from './MobileForm.vue';
import QrCodeForm from './QrCodeForm.vue';
import RegisterForm from './RegisterForm.vue';
import { useUserStore } from "@/store/modules/user";

defineProps({
  sessionTimeout: {
    type: Boolean,
  },
});

const globSetting = useGlobSetting();
const { prefixCls } = useDesign('login');
const { t } = useI18n();
const localeStore = useLocaleStore();
const showLocale = localeStore.getShowPicker;
const title = computed(() => globSetting?.title ?? '');

const loading = ref(false);

onMounted(() => {
  console.info("--platform" + dd.env.platform);
  //new VConsole();
  if (dd.env.platform != "notInDingTalk") {
    autoLogin();
  }
})

function autoLogin() {
  let currentUrl = window.location.href;
  console.info("----currentUrl::" + currentUrl);
  let data = {
    url: currentUrl
  }
  // getConfigApi(data).then(res=>{
  //   if(res.code==200){
  //     let configJson=res.data;
  //     configJson.type=0,   //选填。0表示微应用的jsapi,1表示服务窗的jsapi；不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
  //     configJson.jsApiList = [
  //       'biz.contact.choose',
  //     ] // 必填，需要使用的jsapi列表，注意：不要带dd。
  //     dd.config(configJson);
  //
  //     dd.error(function (err) {
  //       console.info("----error::",err);
  //       alert('dd error: ' + JSON.stringify(err));
  //     })//该方法必须带上，用来捕获鉴权出现的异常信息，否则不方便排查出现的问题
  //
  //
  //   }else{
  //
  //   }
  // })
  try {

    dd.requestAuthCode({
      clientId: `dingtlz5sss61mnnb5qi`,
      corpId: 'ding2e2011827f67ec7d35c2f4657eb6378f',
      success: (res) => {
        const { code } = res;
        loading.value = true;
        userStore.loginH5({
          code,
          mode: 'none', //不要默认的错误提示
        }).then(res => {
          console.log("---login res:", res)
          if (res.code == 200) {
            let userInfo = res.data;
            console.log("--userInfo:", userInfo)
            if (userInfo) {
              loading.value = false;

              notification.success({
                message: t('sys.login.loginSuccessTitle'),
                description: `${t('sys.login.loginSuccessDesc')}: ${userInfo.userName}`,
                duration: 3,
              });
            }
          }
        });


      },
      fail: (e) => {
        createErrorModal({ title: "自动登录失败", content: JSON.stringify(e) })
      },
      complete: () => { },
    });
  } catch (e) {
    notification.error({
      message: "自动登录失败，请输入用户名和密码登录",
      description: JSON.stringify(e),
      duration: 3,
    });
  }


}


</script>
<style lang="less">
@prefix-cls: ~'@{namespace}-login';
@logo-prefix-cls: ~'@{namespace}-app-logo';
@countdown-prefix-cls: ~'@{namespace}-countdown-input';
@dark-bg: #293146;

html[data-theme='dark'] {
  .@{prefix-cls} {
    background-color: @dark-bg;

    &::before {
      background-image: url('@/assets/svg/login-bg-dark.svg');
    }

    .ant-input,
    .ant-input-password {
      background-color: #232a3b;
    }

    .ant-btn:not(.ant-btn-link, .ant-btn-primary) {
      border: 1px solid #4a5569;
    }

    &-form {
      background: transparent !important;
    }

    .app-iconify {
      color: #fff;
    }

    .ant-divider-inner-text {
      color: @text-color-secondary;
    }
  }
}

.@{prefix-cls} {
  min-height: 100%;
  overflow: hidden;

  /* stylelint-disable-next-line media-query-no-invalid */
  @media (max-width: @screen-xl) {
    background-color: #293146;

    .@{prefix-cls}-form {
      background-color: #fff;
    }
  }

  &::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    margin-left: -48%;
    background-image: url('@/assets/svg/login-bg.svg');
    background-repeat: no-repeat;
    background-position: 100%;
    background-size: auto 100%;

    /* stylelint-disable-next-line media-query-no-invalid */
    @media (max-width: @screen-xl) {
      display: none;
    }
  }

  .@{logo-prefix-cls} {
    position: absolute;
    top: 12px;
    height: 30px;

    &__title {
      color: #fff;
      font-size: 16px;
    }

    img {
      width: 32px;
    }
  }

  .container {
    .@{logo-prefix-cls} {
      display: flex;
      width: 60%;
      height: 80px;

      &__title {
        color: #fff;
        font-size: 24px;
      }

      img {
        width: 48px;
      }
    }
  }

  &-sign-in-way {
    .anticon {
      color: #888;
      font-size: 22px;
      cursor: pointer;

      &:hover {
        color: @primary-color;
      }
    }
  }

  input:not([type='checkbox']) {
    min-width: 360px;

    /* stylelint-disable-next-line media-query-no-invalid */
    @media (max-width: @screen-xl) {
      min-width: 320px;
    }

    /* stylelint-disable-next-line media-query-no-invalid */
    @media (max-width: @screen-lg) {
      min-width: 260px;
    }

    /* stylelint-disable-next-line media-query-no-invalid */
    @media (max-width: @screen-md) {
      min-width: 240px;
    }

    /* stylelint-disable-next-line media-query-no-invalid */
    @media (max-width: @screen-sm) {
      min-width: 160px;
    }
  }

  .@{countdown-prefix-cls} input {
    min-width: unset;
  }
}
</style>
